package cn.xfdzx.android.apps.shop.view;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.ScrollView;

import cn.xfdzx.android.apps.shop.contract.ScrollClickListener;

/**
 * @author gzk
 * @date 2020/9/2 0002
 * description：
 */
public class ZhangPhilScrollView extends ScrollView {
    // 这个值控制可以把ScrollView包裹的控件拉出偏离顶部或底部的距离。
    private static final int MAX_OVERSCROLL_Y = 50;
    private ScrollClickListener scrollClickListener;
    private Context mContext;
    private int newMaxOverScrollY;

    public ZhangPhilScrollView(Context context) {
        super(context);

        init(context);
    }

    public ZhangPhilScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);

        init(context);
    }

    /*
     * public ZhangPhilListView(Context context, AttributeSet attrs, int
     * defStyle) { super(context, attrs, defStyle); this.mContext = context;
     * init(); }
     */

    @SuppressLint("NewApi")
    private void init(Context context) {

        this.mContext = context;

        DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
        float density = metrics.density;
        newMaxOverScrollY = (int) (density * MAX_OVERSCROLL_Y);

        //false:隐藏ScrollView的滚动条。
        this.setVerticalScrollBarEnabled(false);

        //不管装载的控件填充的数据是否满屏，都允许橡皮筋一样的弹性回弹。
        this.setOverScrollMode(ScrollView.OVER_SCROLL_ALWAYS);
    }

    private boolean isOnTouch = false;
    private boolean isMax = false;

    // 最关键的地方。
    //支持到SDK8需要增加@SuppressLint("NewApi")。
    @SuppressLint("NewApi")
    @Override
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX,
                                   int scrollY, int scrollRangeX, int scrollRangeY,
                                   int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {

        Log.e("deltaY", deltaY + "");
        Log.e("当前滑动", scrollY + "");
        Log.e("最大滑动", newMaxOverScrollY + "");
        Log.e("手势", isTouchEvent + "");

//        if(isTouchEvent && deltaY < 0){
//            Math.abs(scrollY) * 0.65f
//        }

        if (isTouchEvent&&-scrollY<newMaxOverScrollY){
            isOnTouch=true;
        }
        if (-scrollY>=newMaxOverScrollY*8/10){
            isMax=true;
        }
        if ( isOnTouch&&isMax&&scrollY==0) {
            isOnTouch=false;
            isMax=false;
            scrollClickListener.onScrollClick();
        }


        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY,
                scrollRangeX, scrollRangeY, maxOverScrollX, newMaxOverScrollY,
                isTouchEvent);
    }



    public void setOnScrollClickListener(ScrollClickListener itemClickListener) {
        this.scrollClickListener = itemClickListener;

    }
}
